diff --git a/system/database/DB.php b/system/database/DB.php
index 4481cef..33207d8 100644
--- a/system/database/DB.php
+++ b/system/database/DB.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
 /**
  * CodeIgniter
  *
@@ -35,7 +35,7 @@
 				show_error('The configuration file database.php does not exist.');
 			}
 		}
-
+		
 		include($file_path);
 
 		if ( ! isset($db) OR count($db) == 0)
@@ -59,10 +59,10 @@
 	{
 
 		/* parse the URL from the DSN string
-		 * Database settings can be passed as discreet
-		 * parameters or as a data source name in the first
-		 * parameter. DSNs must have this prototype:
-		 * $dsn = 'driver://username:password@hostname/database';
+		 *  Database settings can be passed as discreet
+		 *  parameters or as a data source name in the first
+		 *  parameter. DSNs must have this prototype:
+		 *  $dsn = 'driver://username:password@hostname/database';
 		 */
 
 		if (($dns = @parse_url($params)) === FALSE)
@@ -100,13 +100,13 @@
 		}
 	}
 
-	// No DB specified yet? Beat them senseless...
+	// No DB specified yet?  Beat them senseless...
 	if ( ! isset($params['dbdriver']) OR $params['dbdriver'] == '')
 	{
 		show_error('You have not selected a database type to connect to.');
 	}
 
-	// Load the DB classes. Note: Since the active record class is optional
+	// Load the DB classes.  Note: Since the active record class is optional
 	// we need to dynamically create a class that extends proper parent class
 	// based on whether we're using the active record class or not.
 	// Kudos to Paul for discovering this clever use of eval()
diff --git a/system/database/DB_active_rec.php b/system/database/DB_active_rec.php
index 508f6be..9ceac0b 100644
--- a/system/database/DB_active_rec.php
+++ b/system/database/DB_active_rec.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
 /**
  * CodeIgniter
  *
@@ -58,7 +58,7 @@
 	var $ar_cache_having		= array();
 	var $ar_cache_orderby		= array();
 	var $ar_cache_set			= array();
-
+	
 	var $ar_no_escape 			= array();
 
 
@@ -175,7 +175,7 @@
 	 *	select_max()
 	 *	select_min()
 	 *	select_avg()
-	 * select_sum()
+	 *  select_sum()
 	 *
 	 * @access	public
 	 * @param	string	the field
@@ -286,7 +286,7 @@
 			{
 				$val = trim($val);
 
-				// Extract any aliases that might exist. We use this information
+				// Extract any aliases that might exist.  We use this information
 				// in the _protect_identifiers to know whether to add a table prefix
 				$this->_track_aliases($val);
 
@@ -332,7 +332,7 @@
 			}
 		}
 
-		// Extract any aliases that might exist. We use this information
+		// Extract any aliases that might exist.  We use this information
 		// in the _protect_identifiers to know whether to add a table prefix
 		$this->_track_aliases($table);
 
@@ -438,7 +438,7 @@
 
 					$v = ' '.$this->escape($v);
 				}
-
+				
 				if ( ! $this->_has_operator($k))
 				{
 					$k .= ' = ';
@@ -926,7 +926,7 @@
 	// --------------------------------------------------------------------
 
 	/**
-	 * The "set" function. Allows key/value pairs to be set for inserting or updating
+	 * The "set" function.  Allows key/value pairs to be set for inserting or updating
 	 *
 	 * @access	public
 	 * @param	mixed
@@ -1084,7 +1084,7 @@
 		{
 			if ($this->db_debug)
 			{
-				//No valid data array. Folds in cases where keys and values did not match up
+				//No valid data array.  Folds in cases where keys and values did not match up
 				return $this->display_error('db_must_use_set');
 			}
 			return FALSE;
@@ -1124,7 +1124,7 @@
 	// --------------------------------------------------------------------
 
 	/**
-	 * The "set_insert_batch" function. Allows key/value pairs to be set for batch inserts
+	 * The "set_insert_batch" function.  Allows key/value pairs to be set for batch inserts
 	 *
 	 * @access	public
 	 * @param	mixed
@@ -1158,7 +1158,7 @@
 
 			if ($escape === FALSE)
 			{
-				$this->ar_set[] = '('.implode(',', $row).')';
+				$this->ar_set[] =  '('.implode(',', $row).')';
 			}
 			else
 			{
@@ -1169,7 +1169,7 @@
 					$clean[] = $this->escape($value);
 				}
 
-				$this->ar_set[] = '('.implode(',', $clean).')';
+				$this->ar_set[] =  '('.implode(',', $clean).')';
 			}
 		}
 
@@ -1399,7 +1399,7 @@
 	// --------------------------------------------------------------------
 
 	/**
-	 * The "set_update_batch" function. Allows key/value pairs to be set for batch updating
+	 * The "set_update_batch" function.  Allows key/value pairs to be set for batch updating
 	 *
 	 * @access	public
 	 * @param	array
@@ -1652,7 +1652,7 @@
 			return;
 		}
 
-		// Does the string contain a comma? If so, we need to separate
+		// Does the string contain a comma?  If so, we need to separate
 		// the string into discreet statements
 		if (strpos($table, ',') !== FALSE)
 		{
@@ -1682,7 +1682,7 @@
 	 * Compile the SELECT statement
 	 *
 	 * Generates a query string based on which functions were used.
-	 * Should not be called directly. The get() function calls it.
+	 * Should not be called directly.  The get() function calls it.
 	 *
 	 * @access	private
 	 * @return	string
@@ -1989,7 +1989,7 @@
 	// --------------------------------------------------------------------
 
 	/**
-	 * Resets the active record values. Called by the get() function
+	 * Resets the active record values.  Called by the get() function
 	 *
 	 * @access	private
 	 * @param	array	An array of fields to reset
@@ -2009,7 +2009,7 @@
 	// --------------------------------------------------------------------
 
 	/**
-	 * Resets the active record values. Called by the get() function
+	 * Resets the active record values.  Called by the get() function
 	 *
 	 * @access	private
 	 * @return	void
diff --git a/system/database/DB_cache.php b/system/database/DB_cache.php
index 3249e9d..3bf065c 100644
--- a/system/database/DB_cache.php
+++ b/system/database/DB_cache.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
 /**
  * CodeIgniter
  *
@@ -64,7 +64,7 @@
 		}
 
 		// Add a trailing slash to the path if needed
-		$path = preg_replace("/(.+?)\/*$/", "\\1/", $path);
+		$path = preg_replace("/(.+?)\/*$/", "\\1/",  $path);
 
 		if ( ! is_dir($path) OR ! is_really_writable($path))
 		{
@@ -162,7 +162,7 @@
 	{
 		if ($segment_one == '')
 		{
-			$segment_one = ($this->CI->uri->segment(1) == FALSE) ? 'default' : $this->CI->uri->segment(1);
+			$segment_one  = ($this->CI->uri->segment(1) == FALSE) ? 'default' : $this->CI->uri->segment(1);
 		}
 
 		if ($segment_two == '')
diff --git a/system/database/DB_driver.php b/system/database/DB_driver.php
index 40be2f9..10e8ed0 100644
--- a/system/database/DB_driver.php
+++ b/system/database/DB_driver.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
 /**
  * CodeIgniter
  *
@@ -73,7 +73,7 @@
 
 
 	/**
-	 * Constructor. Accepts one parameter containing the database
+	 * Constructor.  Accepts one parameter containing the database
 	 * connection settings.
 	 *
 	 * @param array
@@ -114,7 +114,7 @@
 		// Connect to the database and set the connection ID
 		$this->conn_id = ($this->pconnect == FALSE) ? $this->db_connect() : $this->db_pconnect();
 
-		// No connection resource? Throw an error
+		// No connection resource?  Throw an error
 		if ( ! $this->conn_id)
 		{
 			log_message('error', 'Unable to connect to the database');
@@ -199,7 +199,7 @@
 	// --------------------------------------------------------------------
 
 	/**
-	 * Database Version Number. Returns a string containing the
+	 * Database Version Number.  Returns a string containing the
 	 * version of the database being used
 	 *
 	 * @access	public
@@ -237,7 +237,7 @@
 	 * Execute the query
 	 *
 	 * Accepts an SQL string as input and returns a result object upon
-	 * successful execution of a "read" type query. Returns boolean TRUE
+	 * successful execution of a "read" type query.  Returns boolean TRUE
 	 * upon successful execution of a "write" type query. Returns boolean
 	 * FALSE upon failure, and if the $db_debug variable is set to TRUE
 	 * will raise an error.
@@ -265,7 +265,7 @@
 			$sql = preg_replace("/(\W)".$this->swap_pre."(\S+?)/", "\\1".$this->dbprefix."\\2", $sql);
 		}
 
-		// Is query caching enabled? If the query is a "read type"
+		// Is query caching enabled?  If the query is a "read type"
 		// we will load the caching class and return the previously
 		// cached query if it exists
 		if ($this->cache_on == TRUE AND stristr($sql, 'SELECT'))
@@ -286,7 +286,7 @@
 			$sql = $this->compile_binds($sql, $binds);
 		}
 
-		// Save the query for debugging
+		// Save the  query for debugging
 		if ($this->save_queries == TRUE)
 		{
 			$this->queries[] = $sql;
@@ -314,7 +314,7 @@
 				$error_msg = $this->_error_message();
 
 				// We call this function in order to roll-back queries
-				// if transactions are enabled. If we don't call this here
+				// if transactions are enabled.  If we don't call this here
 				// the error message will trigger an exit, causing the
 				// transactions to remain in limbo.
 				$this->trans_complete();
@@ -385,7 +385,7 @@
 		// oci8 vars must be set before calling this
 		$RES->num_rows	= $RES->num_rows();
 
-		// Is query caching enabled? If so, we'll serialize the
+		// Is query caching enabled?  If so, we'll serialize the
 		// result object and save it to a cache file.
 		if ($this->cache_on == TRUE AND $this->_cache_init())
 		{
@@ -435,7 +435,7 @@
 
 	/**
 	 * Simple Query
-	 * This is a simplified version of the query() function. Internally
+	 * This is a simplified version of the query() function.  Internally
 	 * we only use it when running transaction commands since they do
 	 * not require all the features of the main query() function.
 	 *
@@ -718,7 +718,7 @@
 	/**
 	 * Primary
 	 *
-	 * Retrieves the primary key. It assumes that the row in the first
+	 * Retrieves the primary key.  It assumes that the row in the first
 	 * position is the primary key
 	 *
 	 * @access	public
@@ -1216,8 +1216,8 @@
 	 * This function is used extensively by the Active Record class, and by
 	 * a couple functions in this class.
 	 * It takes a column or table name (optionally with an alias) and inserts
-	 * the table prefix onto it. Some logic is necessary in order to deal with
-	 * column names that include the path. Consider a query like this:
+	 * the table prefix onto it.  Some logic is necessary in order to deal with
+	 * column names that include the path.  Consider a query like this:
 	 *
 	 * SELECT * FROM hostname.database.table.column AS c FROM hostname.database.table
 	 *
@@ -1270,7 +1270,7 @@
 
 		// This is basically a bug fix for queries that use MAX, MIN, etc.
 		// If a parenthesis is found we know that we do not need to
-		// escape the data or add a prefix. There's probably a more graceful
+		// escape the data or add a prefix.  There's probably a more graceful
 		// way to deal with this, but I'm not thinking of it -- Rick
 		if (strpos($item, '(') !== FALSE)
 		{
@@ -1285,7 +1285,7 @@
 			$parts	= explode('.', $item);
 
 			// Does the first segment of the exploded item match
-			// one of the aliases previously identified? If so,
+			// one of the aliases previously identified?  If so,
 			// we have nothing more to do other than escape the item
 			if (in_array($parts[0], $this->ar_aliased_tables))
 			{
@@ -1304,7 +1304,7 @@
 				return $item.$alias;
 			}
 
-			// Is there a table prefix defined in the config file? If not, no need to do anything
+			// Is there a table prefix defined in the config file?  If not, no need to do anything
 			if ($this->dbprefix != '')
 			{
 				// We now add the table prefix based on some logic.
@@ -1358,7 +1358,7 @@
 			return $item.$alias;
 		}
 
-		// Is there a table prefix? If not, no need to insert it
+		// Is there a table prefix?  If not, no need to insert it
 		if ($this->dbprefix != '')
 		{
 			// Verify table prefix and replace if necessary
diff --git a/system/database/DB_forge.php b/system/database/DB_forge.php
index 9730c77..a71fca7 100644
--- a/system/database/DB_forge.php
+++ b/system/database/DB_forge.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
 /**
  * Code Igniter
  *
diff --git a/system/database/DB_result.php b/system/database/DB_result.php
index 06eec51..76e1d6a 100644
--- a/system/database/DB_result.php
+++ b/system/database/DB_result.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
 /**
  * CodeIgniter
  *
@@ -28,18 +28,18 @@
  */
 class CI_DB_result {
 
-	var $conn_id		  = NULL;
-	var $result_id		  = NULL;
-	var $result_array	  = array();
-	var $result_object	  = array();
- var $custom_result_object = array();
-	var $current_row	  = 0;
-	var $num_rows		  = 0;
-	var $row_data		  = NULL;
+	var $conn_id		      = NULL;
+	var $result_id		      = NULL;
+	var $result_array	      = array();
+	var $result_object	      = array();
+    var $custom_result_object = array();
+	var $current_row	      = 0;
+	var $num_rows		      = 0;
+	var $row_data		      = NULL;
 
 
 	/**
-	 * Query result. Acts as a wrapper function for the following functions.
+	 * Query result.  Acts as a wrapper function for the following functions.
 	 *
 	 * @access	public
 	 * @param	string	can be "object" or "array"
@@ -47,50 +47,50 @@
 	 */
 	function result($type = 'object')
 	{
-  if ($type == 'array') return $this->result_array();
-  else if ($type == 'object') return $this->result_object();
-  else return $this->custom_result_object($type);
+        if ($type == 'array') return $this->result_array();
+        else if ($type == 'object') return $this->result_object();
+        else return $this->custom_result_object($type);
 	}
 
 	// --------------------------------------------------------------------
 
- /**
-  * Custom query result.
-  *
-  * @param class_name A string that represents the type of object you want back
-  * @return array of objects
-  */
- function custom_result_object($class_name)
- {
-  if (array_key_exists($class_name, $this->custom_result_object))
-  {
-   return $this->custom_result_object[$class_name];
-  }
+    /**
+     * Custom query result.
+     *
+     * @param  class_name  A string that represents the type of object you want back
+     * @return array of objects
+     */
+    function custom_result_object($class_name)
+    {
+        if (array_key_exists($class_name, $this->custom_result_object))
+        {
+            return $this->custom_result_object[$class_name];
+        }
+        
+        if ($this->result_id === FALSE OR $this->num_rows() == 0)
+        {
+            return array();
+        }
 
-  if ($this->result_id === FALSE OR $this->num_rows() == 0)
-  {
-   return array();
-  }
-
-  // add the data to the object
-  $this->_data_seek(0);
-  $result_object = array();
+        // add the data to the object
+        $this->_data_seek(0);
+        $result_object = array();
 		while ($row = $this->_fetch_object())
-  {
-   $object = new $class_name();
-   foreach ($row as $key => $value)
-   {
-    $object->$key = $value;
-   }
+        {
+            $object = new $class_name();
+            foreach ($row as $key => $value)
+            {
+                $object->$key = $value;
+            }
 			$result_object[] = $object;
 		}
 
-  // return the array
-  return $this->custom_result_object[$class_name] = $result_object;
- }
+        // return the array
+        return $this->custom_result_object[$class_name] = $result_object;
+    }
 
 	/**
-	 * Query result. "object" version.
+	 * Query result.  "object" version.
 	 *
 	 * @access	public
 	 * @return	object
@@ -122,7 +122,7 @@
 	// --------------------------------------------------------------------
 
 	/**
-	 * Query result. "array" version.
+	 * Query result.  "array" version.
 	 *
 	 * @access	public
 	 * @return	array
@@ -154,7 +154,7 @@
 	// --------------------------------------------------------------------
 
 	/**
-	 * Query result. Acts as a wrapper function for the following functions.
+	 * Query result.  Acts as a wrapper function for the following functions.
 	 *
 	 * @access	public
 	 * @param	string
@@ -180,9 +180,9 @@
 			$n = 0;
 		}
 
-  if ($type == 'object') return $this->row_object($n);
-  else if ($type == 'array') return $this->row_array($n);
-  else return $this->custom_row_object($n, $type);
+        if ($type == 'object') return $this->row_object($n);
+        else if ($type == 'array') return $this->row_array($n);
+        else return $this->custom_row_object($n, $type);
 	}
 
 	// --------------------------------------------------------------------
@@ -219,7 +219,7 @@
 
 	// --------------------------------------------------------------------
 
- /**
+    /**
 	 * Returns a single result row - custom object version
 	 *
 	 * @access	public
@@ -242,7 +242,7 @@
 		return $result[$this->current_row];
 	}
 
- /**
+    /**
 	 * Returns a single result row - object version
 	 *
 	 * @access	public
@@ -383,9 +383,9 @@
 	/**
 	 * The following functions are normally overloaded by the identically named
 	 * methods in the platform-specific driver -- except when query caching
-	 * is used. When caching is enabled we do not load the other driver.
+	 * is used.  When caching is enabled we do not load the other driver.
 	 * These functions are primarily here to prevent undefined function errors
-	 * when a cached result object is in use. They are not otherwise fully
+	 * when a cached result object is in use.  They are not otherwise fully
 	 * operational due to the unavailability of the database resource IDs with
 	 * cached results.
 	 */
diff --git a/system/database/DB_utility.php b/system/database/DB_utility.php
index a3c00a5..a5f174f 100644
--- a/system/database/DB_utility.php
+++ b/system/database/DB_utility.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
 /**
  * Code Igniter
  *
@@ -342,10 +342,10 @@
 
 		// ------------------------------------------------------
 
-		// Is the encoder supported? If not, we'll either issue an
+		// Is the encoder supported?  If not, we'll either issue an
 		// error or use plain text depending on the debug settings
 		if (($prefs['format'] == 'gzip' AND ! @function_exists('gzencode'))
-		OR ($prefs['format'] == 'zip' AND ! @function_exists('gzcompress')))
+		OR ($prefs['format'] == 'zip'  AND ! @function_exists('gzcompress')))
 		{
 			if ($this->db->db_debug)
 			{
diff --git a/system/database/drivers/mssql/mssql_driver.php b/system/database/drivers/mssql/mssql_driver.php
index 56ecf32..65397ed 100644
--- a/system/database/drivers/mssql/mssql_driver.php
+++ b/system/database/drivers/mssql/mssql_driver.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
 /**
  * CodeIgniter
  *
diff --git a/system/database/drivers/mssql/mssql_forge.php b/system/database/drivers/mssql/mssql_forge.php
index 03151b2..70b20ec 100644
--- a/system/database/drivers/mssql/mssql_forge.php
+++ b/system/database/drivers/mssql/mssql_forge.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
 /**
  * CodeIgniter
  *
@@ -103,7 +103,7 @@
 
 				$sql .= "\n\t".$this->db->_protect_identifiers($field);
 
-				$sql .= ' '.$attributes['TYPE'];
+				$sql .=  ' '.$attributes['TYPE'];
 
 				if (array_key_exists('CONSTRAINT', $attributes))
 				{
diff --git a/system/database/drivers/mssql/mssql_result.php b/system/database/drivers/mssql/mssql_result.php
index f1f6dbb..2897ca5 100644
--- a/system/database/drivers/mssql/mssql_result.php
+++ b/system/database/drivers/mssql/mssql_result.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
 /**
  * CodeIgniter
  *
@@ -120,7 +120,7 @@
 	/**
 	 * Data Seek
 	 *
-	 * Moves the internal pointer to the desired offset. We call
+	 * Moves the internal pointer to the desired offset.  We call
 	 * this internally before fetching results to make sure the
 	 * result set starts at zero
 	 *
diff --git a/system/database/drivers/mssql/mssql_utility.php b/system/database/drivers/mssql/mssql_utility.php
index 3ee4d4b..48ecbc7 100644
--- a/system/database/drivers/mssql/mssql_utility.php
+++ b/system/database/drivers/mssql/mssql_utility.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
 /**
  * CodeIgniter
  *
diff --git a/system/database/drivers/mysql/mysql_driver.php b/system/database/drivers/mysql/mysql_driver.php
index dec1586..b7d547c 100644
--- a/system/database/drivers/mysql/mysql_driver.php
+++ b/system/database/drivers/mysql/mysql_driver.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
 /**
  * CodeIgniter
  *
@@ -133,7 +133,7 @@
 	function db_set_charset($charset, $collation)
 	{
 		static $use_set_names;
-
+		
 		if ( ! isset($use_set_names))
 		{
 			// mysql_set_charset() requires PHP >= 5.2.3 and MySQL >= 5.0.7, use SET NAMES as fallback
@@ -302,12 +302,12 @@
 		if (is_array($str))
 		{
 			foreach ($str as $key => $val)
-	  		{
+	   		{
 				$str[$key] = $this->escape_str($val, $like);
-	  		}
+	   		}
 
-	  		return $str;
-	  	}
+	   		return $str;
+	   	}
 
 		if (function_exists('mysql_real_escape_string') AND is_resource($this->conn_id))
 		{
@@ -650,7 +650,7 @@
 			{
 				if ($field != $index)
 				{
-					$final[$field][] = 'WHEN '.$index.' = '.$val[$index].' THEN '.$val[$field];
+					$final[$field][] =  'WHEN '.$index.' = '.$val[$index].' THEN '.$val[$field];
 				}
 			}
 		}
diff --git a/system/database/drivers/mysql/mysql_forge.php b/system/database/drivers/mysql/mysql_forge.php
index 5328a7b..529ec98 100644
--- a/system/database/drivers/mysql/mysql_forge.php
+++ b/system/database/drivers/mysql/mysql_forge.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
 /**
  * CodeIgniter
  *
@@ -86,7 +86,7 @@
 
 				if (array_key_exists('TYPE', $attributes))
 				{
-					$sql .= ' '.$attributes['TYPE'];
+					$sql .=  ' '.$attributes['TYPE'];
 
 					if (array_key_exists('CONSTRAINT', $attributes))
 					{
diff --git a/system/database/drivers/mysql/mysql_result.php b/system/database/drivers/mysql/mysql_result.php
index 19875ba..5073896 100644
--- a/system/database/drivers/mysql/mysql_result.php
+++ b/system/database/drivers/mysql/mysql_result.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
 /**
  * CodeIgniter
  *
@@ -120,7 +120,7 @@
 	/**
 	 * Data Seek
 	 *
-	 * Moves the internal pointer to the desired offset. We call
+	 * Moves the internal pointer to the desired offset.  We call
 	 * this internally before fetching results to make sure the
 	 * result set starts at zero
 	 *
diff --git a/system/database/drivers/mysql/mysql_utility.php b/system/database/drivers/mysql/mysql_utility.php
index 5ce384c..e9747c5 100644
--- a/system/database/drivers/mysql/mysql_utility.php
+++ b/system/database/drivers/mysql/mysql_utility.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
 /**
  * CodeIgniter
  *
@@ -137,7 +137,7 @@
 			}
 
 			// Fetch the field names and determine if the field is an
-			// integer type. We use this info to decide whether to
+			// integer type.  We use this info to decide whether to
 			// surround the data with quotes or not
 
 			$i = 0;
diff --git a/system/database/drivers/mysqli/mysqli_driver.php b/system/database/drivers/mysqli/mysqli_driver.php
index 74f55c4..b8586c2 100644
--- a/system/database/drivers/mysqli/mysqli_driver.php
+++ b/system/database/drivers/mysqli/mysqli_driver.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
 /**
  * CodeIgniter
  *
@@ -133,7 +133,7 @@
 	function _db_set_charset($charset, $collation)
 	{
 		static $use_set_names;
-
+		
 		if ( ! isset($use_set_names))
 		{
 			// mysqli_set_charset() requires MySQL >= 5.0.7, use SET NAMES as fallback
@@ -568,7 +568,7 @@
 	{
 		return "INSERT INTO ".$table." (".implode(', ', $keys).") VALUES ".implode(', ', $values);
 	}
-
+	
 	// --------------------------------------------------------------------
 
 	/**
@@ -630,7 +630,7 @@
 			{
 				if ($field != $index)
 				{
-					$final[$field][] = 'WHEN '.$index.' = '.$val[$index].' THEN '.$val[$field];
+					$final[$field][] =  'WHEN '.$index.' = '.$val[$index].' THEN '.$val[$field];
 				}
 			}
 		}
diff --git a/system/database/drivers/mysqli/mysqli_forge.php b/system/database/drivers/mysqli/mysqli_forge.php
index 6450968..d509733 100644
--- a/system/database/drivers/mysqli/mysqli_forge.php
+++ b/system/database/drivers/mysqli/mysqli_forge.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
 /**
  * CodeIgniter
  *
@@ -86,7 +86,7 @@
 
 				if (array_key_exists('TYPE', $attributes))
 				{
-					$sql .= ' '.$attributes['TYPE'];
+					$sql .=  ' '.$attributes['TYPE'];
 				}
 
 				if (array_key_exists('CONSTRAINT', $attributes))
diff --git a/system/database/drivers/mysqli/mysqli_result.php b/system/database/drivers/mysqli/mysqli_result.php
index 8b46134..c4d8f5d 100644
--- a/system/database/drivers/mysqli/mysqli_result.php
+++ b/system/database/drivers/mysqli/mysqli_result.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
 /**
  * CodeIgniter
  *
@@ -120,7 +120,7 @@
 	/**
 	 * Data Seek
 	 *
-	 * Moves the internal pointer to the desired offset. We call
+	 * Moves the internal pointer to the desired offset.  We call
 	 * this internally before fetching results to make sure the
 	 * result set starts at zero
 	 *
diff --git a/system/database/drivers/mysqli/mysqli_utility.php b/system/database/drivers/mysqli/mysqli_utility.php
index 5d1f1a6..e17889b 100644
--- a/system/database/drivers/mysqli/mysqli_utility.php
+++ b/system/database/drivers/mysqli/mysqli_utility.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
 /**
  * CodeIgniter
  *
diff --git a/system/database/drivers/oci8/oci8_driver.php b/system/database/drivers/oci8/oci8_driver.php
index 3a05ce3..14df104 100644
--- a/system/database/drivers/oci8/oci8_driver.php
+++ b/system/database/drivers/oci8/oci8_driver.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
 /**
  * CodeIgniter
  *
@@ -6,7 +6,7 @@
  *
  * @package		CodeIgniter
  * @author		ExpressionEngine Dev Team
- * @copyright  Copyright (c) 2008 - 2011, EllisLab, Inc.
+ * @copyright   Copyright (c) 2008 - 2011, EllisLab, Inc.
  * @license		http://codeigniter.com/user_guide/license.html
  * @link		http://codeigniter.com
  * @since		Version 1.0
@@ -23,7 +23,7 @@
  * class is being used or not.
  *
  * @package		CodeIgniter
- * @subpackage Drivers
+ * @subpackage  Drivers
  * @category	Database
  * @author		ExpressionEngine Dev Team
  * @link		http://codeigniter.com/user_guide/database/
@@ -37,7 +37,7 @@
  *
  * NOTE: this uses the PHP 4 oci methods
  *
- * @author	 Kelly McArdle
+ * @author	  Kelly McArdle
  *
  */
 
@@ -74,8 +74,8 @@
 	/**
 	 * Non-persistent database connection
 	 *
-	 * @access private called by the base class
-	 * @return resource
+	 * @access  private called by the base class
+	 * @return  resource
 	 */
 	function db_connect()
 	{
@@ -87,8 +87,8 @@
 	/**
 	 * Persistent database connection
 	 *
-	 * @access private called by the base class
-	 * @return resource
+	 * @access  private called by the base class
+	 * @return  resource
 	 */
 	function db_pconnect()
 	{
@@ -116,8 +116,8 @@
 	/**
 	 * Select the database
 	 *
-	 * @access private called by the base class
-	 * @return resource
+	 * @access  private called by the base class
+	 * @return  resource
 	 */
 	function db_select()
 	{
@@ -145,8 +145,8 @@
 	/**
 	 * Version number query string
 	 *
-	 * @access public
-	 * @return string
+	 * @access  public
+	 * @return  string
 	 */
 	function _version()
 	{
@@ -158,9 +158,9 @@
 	/**
 	 * Execute the query
 	 *
-	 * @access private called by the base class
-	 * @param  string an SQL query
-	 * @return resource
+	 * @access  private called by the base class
+	 * @param   string  an SQL query
+	 * @return  resource
 	 */
 	function _execute($sql)
 	{
@@ -175,9 +175,9 @@
 	/**
 	 * Generate a statement ID
 	 *
-	 * @access private
-	 * @param  string an SQL query
-	 * @return none
+	 * @access  private
+	 * @param   string  an SQL query
+	 * @return  none
 	 */
 	function _set_stmt_id($sql)
 	{
@@ -194,9 +194,9 @@
 	 *
 	 * If needed, each database adapter can prep the query string
 	 *
-	 * @access private called by execute()
-	 * @param  string an SQL query
-	 * @return string
+	 * @access  private called by execute()
+	 * @param   string  an SQL query
+	 * @return  string
 	 */
 	function _prep_query($sql)
 	{
@@ -206,10 +206,10 @@
 	// --------------------------------------------------------------------
 
 	/**
-	 * getCursor. Returns a cursor from the datbase
+	 * getCursor.  Returns a cursor from the datbase
 	 *
-	 * @access public
-	 * @return cursor id
+	 * @access  public
+	 * @return  cursor id
 	 */
 	function get_cursor()
 	{
@@ -220,19 +220,19 @@
 	// --------------------------------------------------------------------
 
 	/**
-	 * Stored Procedure. Executes a stored procedure
+	 * Stored Procedure.  Executes a stored procedure
 	 *
-	 * @access public
-	 * @param  package	 package stored procedure is in
-	 * @param  procedure  stored procedure to execute
-	 * @param  params	 array of parameters
-	 * @return array
+	 * @access  public
+	 * @param   package	 package stored procedure is in
+	 * @param   procedure   stored procedure to execute
+	 * @param   params	  array of parameters
+	 * @return  array
 	 *
 	 * params array keys
 	 *
-	 * KEY	 OPTIONAL	NOTES
+	 * KEY	  OPTIONAL	NOTES
 	 * name		no		the name of the parameter should be in :<param_name> format
-	 * value	no		the value of the parameter. If this is an OUT or IN OUT parameter,
+	 * value	no		the value of the parameter.  If this is an OUT or IN OUT parameter,
 	 *					this should be a reference to a variable
 	 * type		yes		the type of the parameter
 	 * length	yes		the max size of the parameter
@@ -275,8 +275,8 @@
 	/**
 	 * Bind parameters
 	 *
-	 * @access private
-	 * @return none
+	 * @access  private
+	 * @return  none
 	 */
 	function _bind_params($params)
 	{
@@ -386,10 +386,10 @@
 	/**
 	 * Escape String
 	 *
-	 * @access public
-	 * @param  string
+	 * @access  public
+	 * @param   string
 	 * @param	bool	whether or not the string will be used in a LIKE condition
-	 * @return string
+	 * @return  string
 	 */
 	function escape_str($str, $like = FALSE)
 	{
@@ -421,8 +421,8 @@
 	/**
 	 * Affected Rows
 	 *
-	 * @access public
-	 * @return integer
+	 * @access  public
+	 * @return  integer
 	 */
 	function affected_rows()
 	{
@@ -434,8 +434,8 @@
 	/**
 	 * Insert ID
 	 *
-	 * @access public
-	 * @return integer
+	 * @access  public
+	 * @return  integer
 	 */
 	function insert_id()
 	{
@@ -451,9 +451,9 @@
 	 * Generates a platform-specific query string that counts all records in
 	 * the specified database
 	 *
-	 * @access public
-	 * @param  string
-	 * @return string
+	 * @access  public
+	 * @param   string
+	 * @return  string
 	 */
 	function count_all($table = '')
 	{
@@ -480,9 +480,9 @@
 	 *
 	 * Generates a platform-specific query string so that the table names can be fetched
 	 *
-	 * @access private
+	 * @access  private
 	 * @param	boolean
-	 * @return string
+	 * @return  string
 	 */
 	function _list_tables($prefix_limit = FALSE)
 	{
@@ -503,9 +503,9 @@
 	 *
 	 * Generates a platform-specific query string so that the column names can be fetched
 	 *
-	 * @access public
-	 * @param  string the table name
-	 * @return string
+	 * @access  public
+	 * @param   string  the table name
+	 * @return  string
 	 */
 	function _list_columns($table = '')
 	{
@@ -519,9 +519,9 @@
 	 *
 	 * Generates a platform-specific query so that the column data can be retrieved
 	 *
-	 * @access public
-	 * @param  string the table name
-	 * @return object
+	 * @access  public
+	 * @param   string  the table name
+	 * @return  object
 	 */
 	function _field_data($table)
 	{
@@ -533,8 +533,8 @@
 	/**
 	 * The error message string
 	 *
-	 * @access private
-	 * @return string
+	 * @access  private
+	 * @return  string
 	 */
 	function _error_message()
 	{
@@ -547,8 +547,8 @@
 	/**
 	 * The error message number
 	 *
-	 * @access private
-	 * @return integer
+	 * @access  private
+	 * @return  integer
 	 */
 	function _error_number()
 	{
@@ -627,11 +627,11 @@
 	 *
 	 * Generates a platform-specific insert string from the supplied data
 	 *
-	 * @access public
-	 * @param  string the table name
-	 * @param  array  the insert keys
-	 * @param  array  the insert values
-	 * @return string
+	 * @access  public
+	 * @param   string  the table name
+	 * @param   array   the insert keys
+	 * @param   array   the insert values
+	 * @return  string
 	 */
 	function _insert($table, $keys, $values)
 	{
@@ -732,11 +732,11 @@
 	 *
 	 * Generates a platform-specific LIMIT clause
 	 *
-	 * @access public
-	 * @param  string the sql query string
-	 * @param  integer the number of rows to limit the query to
-	 * @param  integer the offset value
-	 * @return string
+	 * @access  public
+	 * @param   string  the sql query string
+	 * @param   integer the number of rows to limit the query to
+	 * @param   integer the offset value
+	 * @return  string
 	 */
 	function _limit($sql, $limit, $offset)
 	{
@@ -759,9 +759,9 @@
 	/**
 	 * Close DB Connection
 	 *
-	 * @access public
-	 * @param  resource
-	 * @return void
+	 * @access  public
+	 * @param   resource
+	 * @return  void
 	 */
 	function _close($conn_id)
 	{
diff --git a/system/database/drivers/oci8/oci8_forge.php b/system/database/drivers/oci8/oci8_forge.php
index 589e3c2..3cd1758 100644
--- a/system/database/drivers/oci8/oci8_forge.php
+++ b/system/database/drivers/oci8/oci8_forge.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
 /**
  * CodeIgniter
  *
@@ -90,7 +90,7 @@
 
 				$sql .= "\n\t".$this->db->_protect_identifiers($field);
 
-				$sql .= ' '.$attributes['TYPE'];
+				$sql .=  ' '.$attributes['TYPE'];
 
 				if (array_key_exists('CONSTRAINT', $attributes))
 				{
diff --git a/system/database/drivers/oci8/oci8_result.php b/system/database/drivers/oci8/oci8_result.php
index 60d8396..88531b4 100644
--- a/system/database/drivers/oci8/oci8_result.php
+++ b/system/database/drivers/oci8/oci8_result.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
 /**
  * CodeIgniter
  *
@@ -6,7 +6,7 @@
  *
  * @package		CodeIgniter
  * @author		ExpressionEngine Dev Team
- * @copyright  Copyright (c) 2008 - 2011, EllisLab, Inc.
+ * @copyright   Copyright (c) 2008 - 2011, EllisLab, Inc.
  * @license		http://codeigniter.com/user_guide/license.html
  * @link		http://codeigniter.com
  * @since		Version 1.0
@@ -37,8 +37,8 @@
 	 * so we have to use what amounts to a hack.
 	 *
 	 *
-	 * @access public
-	 * @return integer
+	 * @access  public
+	 * @return  integer
 	 */
 	function num_rows()
 	{
@@ -58,8 +58,8 @@
 	/**
 	 * Number of fields in the result set
 	 *
-	 * @access public
-	 * @return integer
+	 * @access  public
+	 * @return  integer
 	 */
 	function num_fields()
 	{
@@ -102,8 +102,8 @@
 	 *
 	 * Generates an array of objects containing field meta-data
 	 *
-	 * @access public
-	 * @return array
+	 * @access  public
+	 * @return  array
 	 */
 	function field_data()
 	{
@@ -114,7 +114,7 @@
 			$F				= new stdClass();
 			$F->name		= ocicolumnname($this->stmt_id, $c);
 			$F->type		= ocicolumntype($this->stmt_id, $c);
-			$F->max_length = ocicolumnsize($this->stmt_id, $c);
+			$F->max_length  = ocicolumnsize($this->stmt_id, $c);
 
 			$retval[] = $F;
 		}
@@ -145,8 +145,8 @@
 	 *
 	 * Returns the result set as an array
 	 *
-	 * @access private
-	 * @return array
+	 * @access  private
+	 * @return  array
 	 */
 	function _fetch_assoc(&$row)
 	{
@@ -162,8 +162,8 @@
 	 *
 	 * Returns the result set as an object
 	 *
-	 * @access private
-	 * @return object
+	 * @access  private
+	 * @return  object
 	 */
 	function _fetch_object()
 	{
@@ -202,10 +202,10 @@
 	// --------------------------------------------------------------------
 
 	/**
-	 * Query result. "array" version.
+	 * Query result.  "array" version.
 	 *
-	 * @access public
-	 * @return array
+	 * @access  public
+	 * @return  array
 	 */
 	function result_array()
 	{
@@ -230,7 +230,7 @@
 	/**
 	 * Data Seek
 	 *
-	 * Moves the internal pointer to the desired offset. We call
+	 * Moves the internal pointer to the desired offset.  We call
 	 * this internally before fetching results to make sure the
 	 * result set starts at zero
 	 *
diff --git a/system/database/drivers/oci8/oci8_utility.php b/system/database/drivers/oci8/oci8_utility.php
index f1fe5dc..854b467 100644
--- a/system/database/drivers/oci8/oci8_utility.php
+++ b/system/database/drivers/oci8/oci8_utility.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
 /**
  * CodeIgniter
  *
diff --git a/system/database/drivers/odbc/odbc_driver.php b/system/database/drivers/odbc/odbc_driver.php
index 4268ccd..81e0d7c 100644
--- a/system/database/drivers/odbc/odbc_driver.php
+++ b/system/database/drivers/odbc/odbc_driver.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
 /**
  * CodeIgniter
  *
diff --git a/system/database/drivers/odbc/odbc_forge.php b/system/database/drivers/odbc/odbc_forge.php
index 7e9414c..3ec86b4 100644
--- a/system/database/drivers/odbc/odbc_forge.php
+++ b/system/database/drivers/odbc/odbc_forge.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
 /**
  * CodeIgniter
  *
@@ -102,7 +102,7 @@
 
 				$sql .= "\n\t".$this->db->_protect_identifiers($field);
 
-				$sql .= ' '.$attributes['TYPE'];
+				$sql .=  ' '.$attributes['TYPE'];
 
 				if (array_key_exists('CONSTRAINT', $attributes))
 				{
diff --git a/system/database/drivers/odbc/odbc_result.php b/system/database/drivers/odbc/odbc_result.php
index d83b2e5..5d64a46 100644
--- a/system/database/drivers/odbc/odbc_result.php
+++ b/system/database/drivers/odbc/odbc_result.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
 /**
  * CodeIgniter
  *
@@ -120,7 +120,7 @@
 	/**
 	 * Data Seek
 	 *
-	 * Moves the internal pointer to the desired offset. We call
+	 * Moves the internal pointer to the desired offset.  We call
 	 * this internally before fetching results to make sure the
 	 * result set starts at zero
 	 *
diff --git a/system/database/drivers/odbc/odbc_utility.php b/system/database/drivers/odbc/odbc_utility.php
index 424958b..d335bed 100644
--- a/system/database/drivers/odbc/odbc_utility.php
+++ b/system/database/drivers/odbc/odbc_utility.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
 /**
  * CodeIgniter
  *
diff --git a/system/database/drivers/postgre/postgre_driver.php b/system/database/drivers/postgre/postgre_driver.php
index bf985de..47ff362 100644
--- a/system/database/drivers/postgre/postgre_driver.php
+++ b/system/database/drivers/postgre/postgre_driver.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
 /**
  * CodeIgniter
  *
diff --git a/system/database/drivers/postgre/postgre_forge.php b/system/database/drivers/postgre/postgre_forge.php
index fbfaac8..91a1c68 100644
--- a/system/database/drivers/postgre/postgre_forge.php
+++ b/system/database/drivers/postgre/postgre_forge.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
 /**
  * CodeIgniter
  *
@@ -128,14 +128,14 @@
 				}
 
 				// If this is an auto-incrementing primary key, use the serial data type instead
-				if (in_array($field, $primary_keys) && array_key_exists('AUTO_INCREMENT', $attributes)
+				if (in_array($field, $primary_keys) && array_key_exists('AUTO_INCREMENT', $attributes) 
 					&& $attributes['AUTO_INCREMENT'] === TRUE)
 				{
 					$sql .= ' SERIAL';
 				}
 				else
 				{
-					$sql .= ' '.$attributes['TYPE'];
+					$sql .=  ' '.$attributes['TYPE'];
 				}
 
 				// Modified to prevent constraints with integer data types
@@ -213,8 +213,8 @@
 	/**
 	 * Drop Table
 	 *
-	 * @access  private
-	 * @return  bool
+	 * @access    private
+	 * @return    bool
 	 */
 	function _drop_table($table)
 	{
diff --git a/system/database/drivers/postgre/postgre_result.php b/system/database/drivers/postgre/postgre_result.php
index e73a258..e9a1d16 100644
--- a/system/database/drivers/postgre/postgre_result.php
+++ b/system/database/drivers/postgre/postgre_result.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
 /**
  * CodeIgniter
  *
@@ -120,7 +120,7 @@
 	/**
 	 * Data Seek
 	 *
-	 * Moves the internal pointer to the desired offset. We call
+	 * Moves the internal pointer to the desired offset.  We call
 	 * this internally before fetching results to make sure the
 	 * result set starts at zero
 	 *
diff --git a/system/database/drivers/postgre/postgre_utility.php b/system/database/drivers/postgre/postgre_utility.php
index c7690fc..741c52e 100644
--- a/system/database/drivers/postgre/postgre_utility.php
+++ b/system/database/drivers/postgre/postgre_utility.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
 /**
  * CodeIgniter
  *
diff --git a/system/database/drivers/sqlite/sqlite_driver.php b/system/database/drivers/sqlite/sqlite_driver.php
index 17b5f51..eb4e585 100644
--- a/system/database/drivers/sqlite/sqlite_driver.php
+++ b/system/database/drivers/sqlite/sqlite_driver.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
 /**
  * CodeIgniter
  *
diff --git a/system/database/drivers/sqlite/sqlite_forge.php b/system/database/drivers/sqlite/sqlite_forge.php
index c1f8099..5690408 100644
--- a/system/database/drivers/sqlite/sqlite_forge.php
+++ b/system/database/drivers/sqlite/sqlite_forge.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
 /**
  * CodeIgniter
  *
@@ -100,7 +100,7 @@
 
 				$sql .= "\n\t".$this->db->_protect_identifiers($field);
 
-				$sql .= ' '.$attributes['TYPE'];
+				$sql .=  ' '.$attributes['TYPE'];
 
 				if (array_key_exists('CONSTRAINT', $attributes))
 				{
@@ -172,7 +172,7 @@
 	/**
 	 * Drop Table
 	 *
-	 * Unsupported feature in SQLite
+	 *  Unsupported feature in SQLite
 	 *
 	 * @access	private
 	 * @return	bool
diff --git a/system/database/drivers/sqlite/sqlite_result.php b/system/database/drivers/sqlite/sqlite_result.php
index 6220494..7bd30db 100644
--- a/system/database/drivers/sqlite/sqlite_result.php
+++ b/system/database/drivers/sqlite/sqlite_result.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
 /**
  * CodeIgniter
  *
@@ -116,7 +116,7 @@
 	/**
 	 * Data Seek
 	 *
-	 * Moves the internal pointer to the desired offset. We call
+	 * Moves the internal pointer to the desired offset.  We call
 	 * this internally before fetching results to make sure the
 	 * result set starts at zero
 	 *
diff --git a/system/database/drivers/sqlite/sqlite_utility.php b/system/database/drivers/sqlite/sqlite_utility.php
index bd741dd..508023e 100644
--- a/system/database/drivers/sqlite/sqlite_utility.php
+++ b/system/database/drivers/sqlite/sqlite_utility.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
 /**
  * CodeIgniter
  *
@@ -28,7 +28,7 @@
 	 * List databases
 	 *
 	 * I don't believe you can do a database listing with SQLite
-	 * since each database is its own file. I suppose we could
+	 * since each database is its own file.  I suppose we could
 	 * try reading a directory looking for SQLite files, but
 	 * that doesn't seem like a terribly good idea
 	 *
